#ifndef PREFIXTREE_H_
#define PREFIXTREE_H_

#include "../common.h"

//NB :	un mot est un chemin de la racine vers un noeud de l'APC
//		La racine contient forcement le mot vide épsilone 'ε'
//		par conséquent tous les mot seront de la forme m = ε.m'


typedef struct ptree {
	struct ptree * up ;			// père
	struct ptree * firstchild;	// tête de liste des fils
	struct ptree * right;		// frère (noeud de même père faisant partie d'une liste)
//	uint	count;		// Nombre de fils
	int		id;			// indice du noeud
	byte	c;			// caractère
}ptree_t;


//Retourne le noeud représentant le mot m.b
//ou m est le mot représenté par node et b un caractère
//NULL si ce mot n'existe pas
extern ptree_t * PTree_getNode(ptree_t * node, byte b);

//Copie le mot représenté par node dans word et retourn longeur du mot
//word doit être assez large pour contenir le mot sinon segfault !
extern int PTree_readWord(ptree_t * node, byte * word);

//Concaténation de 2 mots (ou plustot d'un ensemble non vide de mot à un autre mot)
extern void PTree_cat(ptree_t * prefix, ptree_t * sufix);

//Affichage graphique d'un arbre en format PS
extern void PTree_draw(ptree_t * arbre, char * filename);


#endif /* PREFIXTREE_H_ */
